home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / c / modex104.zip / TEST6A.BAS < prev    next >
BASIC Source File  |  1993-05-14  |  13KB  |  562 lines

  1. 'File:     TEST6A.BAS
  2. 'Descp.:   A Mode "X" demonstration for Quickbasic 4.5
  3. 'Author:   Matt Pritchard
  4. 'Date:     14 April, 1993
  5. '
  6. DECLARE SUB DEMO.RES (Mode%, Xmax%, Ymax%)
  7. DECLARE SUB ERROR.OUT (Message$)
  8. DECLARE FUNCTION GET.KEY% ()
  9. DECLARE SUB LOAD.SHAPES ()
  10. DECLARE SUB PAGE.DEMO ()
  11. DECLARE SUB PRINT.TEXT (Text$, Xpos%, Ypos%, ColorF%, ColorB%)
  12. DECLARE SUB TPRINT.TEXT (Text$, Xpos%, Ypos%, ColorF%)
  13. DEFINT A-Z
  14.  
  15.  
  16. TYPE ShapeType
  17.     ImgData AS STRING * 512
  18.     xWidth  AS INTEGER
  19.     yWidth  AS INTEGER
  20. END TYPE
  21.  
  22. TYPE Sprite
  23.     Xpos    AS INTEGER
  24.     Ypos    AS INTEGER
  25.     XDir    AS INTEGER
  26.     YDir    AS INTEGER
  27.     Shape   AS INTEGER
  28. END TYPE
  29.  
  30.  
  31. CONST MaxShapes = 32
  32.  
  33.     REM $INCLUDE: 'UTILS.BI'
  34.     REM $INCLUDE: 'MODEX.BI'
  35.  
  36. DIM SHARED Img(32) AS ShapeType
  37. COMMON SHARED Img() AS ShapeType
  38.  
  39.  
  40.     CALL INIT.RANDOM
  41.  
  42.     CALL LOAD.SHAPES
  43.  
  44.     CALL DEMO.RES(Mode320x200, 320, 200)
  45.     CALL DEMO.RES(Mode320x400, 320, 400)
  46.  
  47.     CALL DEMO.RES(Mode360x200, 360, 200)
  48.     CALL DEMO.RES(Mode360x400, 360, 400)
  49.  
  50.     CALL DEMO.RES(Mode320x240, 320, 240)
  51.     CALL DEMO.RES(Mode320x480, 320, 480)
  52.  
  53.     CALL DEMO.RES(Mode360x240, 360, 240)
  54.     CALL DEMO.RES(Mode360x480, 360, 480)
  55.  
  56.     CALL PAGE.DEMO
  57.  
  58.     SET.VIDEO.MODE 3
  59.     DOS.PRINT "THIS MODE X DEMO IS FINISHED"
  60.     END
  61.  
  62. SUB DEMO.RES (Mode, Xmax, Ymax)
  63.  
  64.     IF SET.MODEX%(Mode) = 0 THEN
  65.         ERROR.OUT "Unable to SET_MODEX" + STR$(Mode)
  66.     END IF
  67.  
  68.     XCenter = Xmax \ 2
  69.     
  70.     X1 = 10
  71.     Y1 = 10
  72.     X2 = Xmax - 1
  73.     Y2 = Ymax - 1
  74.  
  75.     FOR Z = 0 TO 3
  76.         Colr = 31 - Z * 2
  77.         DRAW.LINE X1 + Z, Y1 + Z, X2 - Z, Y1 + Z, Colr
  78.         DRAW.LINE X1 + Z, Y1 + Z, X1 + Z, Y2 - Z, Colr
  79.         DRAW.LINE X1 + Z, Y2 - Z, X2 - Z, Y2 - Z, Colr
  80.         DRAW.LINE X2 - Z, Y1 + Z, X2 - Z, Y2 - Z, Colr
  81.     NEXT Z
  82.  
  83.     XChars = Xmax \ 10
  84.     YChars = Ymax \ 10
  85.  
  86.     FOR X = 0 TO XChars - 1
  87.         TGPRINTC 48 + ((X + 1) MOD 10), X * 10 + 1, 1, 9 + ((X \ 8) MOD 7)
  88.         DRAW.LINE X * 10 + 9, 0, X * 10 + 9, 3, 15
  89.     NEXT X
  90.  
  91.     FOR Y = 0 TO YChars - 1
  92.         TGPRINTC 48 + ((Y + 1) MOD 10), 1, Y * 10 + 1, 9 + ((Y \ 10) MOD 7)
  93.         DRAW.LINE 0, Y * 10 + 9, 3, Y * 10 + 9, 15
  94.     NEXT Y
  95.  
  96.     ' Draw Lines
  97.  
  98.     FOR X = 0 TO 63
  99.         N = 15 + X * .75
  100.         SET.DAC.REGISTER 64 + X, N, N, N
  101.         SET.DAC.REGISTER 128 + X, 0, N, N
  102.  
  103.         DRAW.LINE 103 - X, 60, 40 + X, 123, 64 + X
  104.         DRAW.LINE 40, 60 + X, 103, 123 - X, 128 + X
  105.  
  106.     NEXT X
  107.     TPRINT.TEXT "LINE TEST", 37, 130, c.BLUE
  108.  
  109.     Y = 60: Gap = 0
  110.     FOR X = 0 TO 9
  111.         FILL.BLOCK 120, Y, 120 + X, Y + Gap, 64 + X
  112.         FILL.BLOCK 140 - (15 - X), Y, 150 + X, Y + Gap, 230 + X
  113.         FILL.BLOCK 170 - (15 - X), Y, 170, Y + Gap, 128 + X
  114.         Y = Y + Gap + 2
  115.         Gap = Gap + 1
  116.     NEXT X
  117.     TPRINT.TEXT "FILL TEST", 110, 46, c.GREEN
  118.  
  119.  
  120.     FOR X = 190 TO 250 STEP 2
  121.         FOR Y = 60 TO 122 STEP 2
  122.           SET.POINT X, Y, X + Y + X + Y
  123.         NEXT Y
  124.     NEXT X
  125.  
  126.     TPRINT.TEXT "PIXEL TEST", 182, 130, c.RED
  127.  
  128.     FOR X = 190 TO 250 STEP 2
  129.         FOR Y = 60 TO 122 STEP 2
  130.           IF READ.POINT(X, Y) <> ((X + Y + X + Y) AND 255) THEN
  131.              ERROR.OUT "READ.PIXEL Failure"
  132.           END IF
  133.         NEXT Y
  134.     NEXT X
  135.  
  136.  
  137.  
  138.     Msg$ = " This is a MODE X demo "
  139.     PRINT.TEXT Msg$, XCenter - (LEN(Msg$) * 4), 20, c.bRED, c.BLUE
  140.     Msg$ = "Screen Resolution is     by    "
  141.     Xp = XCenter - (LEN(Msg$) * 4)
  142.     PRINT.TEXT Msg$, Xp, 30, c.bGREEN, c.BLACK
  143.  
  144.     PRINT.TEXT LTRIM$(STR$(Xmax)), Xp + 8 * 21, 30, c.bPURPLE, c.BLACK
  145.     PRINT.TEXT LTRIM$(STR$(Ymax)), Xp + 8 * 28, 30, c.bWHITE, c.BLACK
  146.  
  147.     FOR X = 0 TO 15
  148.         SET.DAC.REGISTER 230 + X, 63 - X * 4, 0, 15 + X * 3
  149.         DRAW.LINE 30 + X, Ymax - 6 - X, Xmax - 20 - X, Ymax - 6 - X, 230 + X
  150.     NEXT X
  151.     TPRINT.TEXT "Press <ANY KEY> to Continue", XCenter - (26 * 4), Ymax - 18, c.YELLOW
  152.  
  153.     X = GET.KEY%
  154.     IF X = KyESC THEN ERROR.OUT "ABORT"
  155.  
  156. END SUB
  157.  
  158. SUB ERROR.OUT (Message$)
  159.  
  160.     SET.VIDEO.MODE 3
  161.     DOS.PRINT Message$
  162.     END
  163.  
  164. END SUB
  165.  
  166. FUNCTION GET.KEY%
  167.  
  168.     DO
  169.         X = SCAN.KEYBOARD
  170.     LOOP UNTIL X
  171.  
  172.     GET.KEY% = X
  173.  
  174. END FUNCTION
  175.  
  176. SUB LOAD.SHAPES
  177.  
  178. DIM Grid(1 TO 32, 1 TO 32)
  179.  
  180.     FOR Shape = 0 TO MaxShapes - 1
  181.  
  182.         FOR Y = 1 TO 32
  183.         FOR X = 1 TO 32
  184.             Grid(X, Y) = 0
  185.         NEXT X
  186.         NEXT Y
  187.  
  188.         Style = RANDOM.INT(6)
  189.         Colour = 1 + RANDOM.INT(15)
  190.         
  191.         SELECT CASE Style
  192.  
  193.         CASE 0:         ' Solid Box
  194.  
  195.             DO
  196.                 xWidth = 3 + RANDOM.INT(30)
  197.                 yWidth = 3 + RANDOM.INT(30)
  198.             LOOP UNTIL ((xWidth * yWidth) <= 512)
  199.  
  200.             FOR Y = 1 TO yWidth
  201.                 FOR X = 1 TO xWidth
  202.                     Grid(X, Y) = Colour
  203.                 NEXT X
  204.             NEXT Y
  205.  
  206.         CASE 1:         ' Hollow Box
  207.  
  208.             DO
  209.                 xWidth = 5 + RANDOM.INT(28)
  210.                 yWidth = 5 + RANDOM.INT(28)
  211.             LOOP UNTIL ((xWidth * yWidth) <= 512)
  212.  
  213.             FOR Y = 1 TO yWidth
  214.                 FOR X = 1 TO xWidth
  215.                     Grid(X, Y) = Colour
  216.                 NEXT X
  217.             NEXT Y
  218.  
  219.             HollowX = 1 + RANDOM.INT(xWidth \ 2 - 1)
  220.             HollowY = 1 + RANDOM.INT(yWidth \ 2 - 1)
  221.  
  222.             FOR Y = HollowY + 1 TO yWidth - HollowY
  223.                 FOR X = HollowX + 1 TO xWidth - HollowX
  224.                     Grid(X, Y) = nil
  225.                 NEXT X
  226.             NEXT Y
  227.  
  228.         CASE 2:         ' Solid Diamond
  229.  
  230.             xWidth = 3 + 2 * RANDOM.INT(10)
  231.             yWidth = xWidth
  232.             Centre = xWidth \ 2
  233.  
  234.             FOR Y = 0 TO Centre
  235.                 FOR X = 0 TO Y
  236.                     Grid(Centre - X + 1, Y + 1) = Colour
  237.                     Grid(Centre + X + 1, Y + 1) = Colour
  238.                     Grid(Centre - X + 1, yWidth - Y) = Colour
  239.                     Grid(Centre + X + 1, yWidth - Y) = Colour
  240.                 NEXT X
  241.             NEXT Y
  242.  
  243.  
  244.         CASE 3:         ' Hollow Diamond
  245.  
  246.  
  247.             xWidth = 3 + 2 * RANDOM.INT(10)
  248.             yWidth = xWidth
  249.             Centre = xWidth \ 2
  250.             sWidth = RANDOM.INT(Centre)
  251.  
  252.             FOR Y = 0 TO Centre
  253.                 FOR X = 0 TO Y
  254.                     IF X + (Centre - Y) >= sWidth THEN
  255.                         Grid(Centre - X + 1, Y + 1) = Colour
  256.                         Grid(Centre + X + 1, Y + 1) = Colour
  257.                         Grid(Centre - X + 1, yWidth - Y) = Colour
  258.                         Grid(Centre + X + 1, yWidth - Y) = Colour
  259.                     END IF
  260.                 NEXT X
  261.             NEXT Y
  262.  
  263.         CASE 4:         ' Ball
  264.  
  265.             xWidth = 7 + 2 * RANDOM.INT(8)
  266.             yWidth = xWidth
  267.             Centre = 1 + xWidth \ 2
  268.  
  269.             FOR Y = 1 TO yWidth
  270.                 FOR X = 1 TO xWidth
  271.                     D = SQR(((Centre - X) * (Centre - X)) + ((Centre - Y) * (Centre - Y)))
  272.                     IF D < Centre THEN Grid(X, Y) = 150 + Colour * 2 + D * 3
  273.                 NEXT X
  274.             NEXT Y
  275.  
  276.         CASE 5:         ' Ball
  277.  
  278.  
  279.             xWidth = 7 + 2 * RANDOM.INT(8)
  280.             yWidth = xWidth
  281.             Centre = 1 + xWidth \ 2
  282.             sWidth = RANDOM.INT(xWidth)
  283.  
  284.             FOR Y = 1 TO yWidth
  285.                 FOR X = 1 TO xWidth
  286.                     D = SQR(((Centre - X) * (Centre - X)) + ((Centre - Y) * (Centre - Y)))
  287.                     IF D < Centre AND D >= sWidth THEN Grid(X, Y) = 150 + Colour * 2 + D * 3
  288.                 NEXT X
  289.             NEXT Y
  290.  
  291.         END SELECT
  292.  
  293.         Img(Shape).xWidth = xWidth
  294.         Img(Shape).yWidth = yWidth
  295.  
  296.         A$ = STRING$(xWidth * yWidth, nil)
  297.  
  298.         c = 1
  299.         FOR Y = 1 TO yWidth
  300.             FOR X = 1 TO xWidth
  301.                 MID$(A$, c, 1) = CHR$(Grid(X, Y))
  302.                 c = c + 1
  303.             NEXT X
  304.         NEXT Y
  305.  
  306.         Img(Shape).ImgData = A$
  307.         
  308.  
  309.     NEXT Shape
  310.  
  311. END SUB
  312.  
  313. SUB PAGE.DEMO
  314.  
  315. CONST MaxSprites = 64
  316.  
  317. DIM Obj(MaxSprites) AS Sprite
  318. DIM LastX(MaxSprites, 1), LastY(MaxSprites, 1)
  319. DIM LastObjects(1)
  320.  
  321.     ScreenX = 360: ScreenY = 240
  322.  
  323.     IF SET.VGA.MODEX%(Mode320x200, ScreenX, ScreenY, 3) = 0 THEN
  324.         ERROR.OUT "Unable to SET_VGA_MODEX" + STR$(Mode)
  325.     END IF
  326.  
  327.     SET.ACTIVE.PAGE 0
  328.  
  329.     CLEAR.VGA.SCREEN c.BLACK
  330.                 
  331.     PRINT.TEXT "This is a Test of the Following Functions:", 10, 9, c.bWHITE, c.BLACK
  332.  
  333.     DRAW.LINE 10, 18, 350, 18, c.YELLOW
  334.     PRINT.TEXT "SET_ACTIVE_PAGE", 10, 20, c.bBLUE, c.BLACK
  335.     PRINT.TEXT "SET_DISPLAY_PAGE", 10, 30, c.GREEN, c.BLACK
  336.     PRINT.TEXT "SET_DAC_REGISTER", 10, 40, c.RED, c.BLACK
  337.     PRINT.TEXT "CLEAR_VGA_SCREEN", 10, 50, c.CYAN, c.BLACK
  338.  
  339.     PRINT.TEXT "TDRAW_BITMAP", 10, 60, c.PURPLE, c.BLACK
  340.     PRINT.TEXT "COPY_PAGE", 10, 70, c.GREEN, c.BLACK
  341.     PRINT.TEXT "COPY_BITMAP", 10, 80, c.CYAN, c.BLACK
  342.  
  343.     PRINT.TEXT "GPRINTC", 10, 90, c.BLUE, c.BLACK
  344.     PRINT.TEXT "TGPRINTC", 10, 100, c.GREEN, c.BLACK
  345.     PRINT.TEXT "SET_WINDOW", 10, 110, c.RED, c.BLACK
  346.  
  347.     PRINT.TEXT "VIRTUAL SCREEN SIZES", 190, 20, c.bBLUE, c.BLACK
  348.     PRINT.TEXT "    SMOOTH SCROLLING", 190, 30, c.GREEN, c.BLACK
  349.     PRINT.TEXT "    SPRITE ANIMATION", 190, 40, c.CYAN, c.BLACK
  350.     PRINT.TEXT "       PAGE FLIPPING", 190, 50, c.RED, c.BLACK
  351.     PRINT.TEXT "       COLOR CYCLING", 190, 60, c.PURPLE, c.BLACK
  352.  
  353.  
  354.     FOR X = 0 TO 60
  355.         SET.DAC.REGISTER 50 + X, 3 + X, 0, 60 - X
  356.         SET.DAC.REGISTER 150 + X, 3 + X, 0, 60 - X
  357.     NEXT X
  358.  
  359.     c = 0: DC = 1
  360.     FOR X = 0 TO ScreenX \ 2
  361.         DRAW.LINE ScreenX \ 2 - 1, ScreenY \ 4, X, ScreenY - 1, c + 50
  362.         DRAW.LINE ScreenX \ 2, ScreenY \ 4, ScreenX - X - 1, ScreenY - 1, c + 50
  363.         c = c + DC
  364.         IF c = 0 OR c = 60 THEN DC = -DC
  365.     NEXT X
  366.                 
  367.     TPRINT.TEXT "Press <ANY KEY> to Continue", 72, 190, c.bWHITE
  368.     TPRINT.TEXT "< > = Faster   < > = Slower", 72, 204, c.bGREEN
  369.     TPRINT.TEXT "< > = Fewer Shapes  < > = More Shapes", 32, 218, c.bCYAN
  370.  
  371.     TGPRINTC 43, 80, 204, c.YELLOW
  372.     TGPRINTC 45, 200, 204, c.YELLOW
  373.  
  374.     TGPRINTC 25, 40, 218, c.YELLOW
  375.     TGPRINTC 24, 200, 218, c.YELLOW
  376.  
  377.     COPY.PAGE 0, 1
  378.     COPY.PAGE 0, 2
  379.  
  380.     FOR X = 1 TO MaxSprites
  381.         DO
  382.             Obj(X).XDir = RANDOM.INT(7) - 3
  383.             Obj(X).YDir = RANDOM.INT(7) - 3
  384.         LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0)
  385.  
  386.         Obj(X).Shape = X MOD MaxShapes
  387.  
  388.         SpriteX = Img(Obj(X).Shape).xWidth
  389.         SpriteY = Img(Obj(X).Shape).yWidth
  390.  
  391.         Obj(X).Xpos = 1 + RANDOM.INT(ScreenX - SpriteX - 2)
  392.         Obj(X).Ypos = 1 + RANDOM.INT(ScreenY - SpriteY - 2)
  393.  
  394.         LastX(X, 0) = Obj(X).Xpos
  395.         LastX(X, 1) = Obj(X).Xpos
  396.         LastY(X, 0) = Obj(X).Ypos
  397.         LastY(X, 1) = Obj(X).Ypos
  398.     NEXT X
  399.  
  400.     CurrentPage = 0
  401.  
  402.     'View Shift...
  403.  
  404.     ViewX = 0
  405.     ViewY = 0
  406.     ViewMax = 3
  407.     ViewCnt = 0
  408.     ViewXD = 1
  409.     ViewYD = 1
  410.  
  411.     SetColor = 3: SDir = 1
  412.     PrevColor = 0: PDir = 1
  413.  
  414.     VisObjects = MaxSprites \ 2
  415.     LastObjects(0) = 0
  416.     LastObjects(1) = 0
  417.  
  418. DRAW.LOOP:
  419.  
  420.  
  421.     SET.ACTIVE.PAGE CurrentPage
  422.  
  423.     ' Erase Old Images
  424.  
  425.     FOR X = 1 TO LastObjects(CurrentPage)
  426.     
  427.         X1 = LastX(X, CurrentPage) AND &HFFFC
  428.         Y1 = LastY(X, CurrentPage)
  429.         X2 = ((LastX(X, CurrentPage) + Img(Obj(X).Shape).xWidth)) OR 3
  430.         Y2 = Y1 + Img(Obj(X).Shape).yWidth - 1
  431.  
  432.         COPY.BITMAP 2, X1, Y1, X2, Y2, CurrentPage, X1, Y1
  433.     
  434.     NEXT X
  435.  
  436.     ' Draw new images
  437.  
  438.     FOR X = 1 TO VisObjects
  439.  
  440.         SpriteX = Img(Obj(X).Shape).xWidth
  441.         SpriteY = Img(Obj(X).Shape).yWidth
  442.  
  443.         ' Move Sprite
  444.  
  445. REDOX:
  446.         NewX = Obj(X).Xpos + Obj(X).XDir
  447.         IF NewX < 0 OR NewX + SpriteX > ScreenX THEN
  448.             Obj(X).XDir = -Obj(X).XDir
  449.             IF RANDOM.INT(20) = 1 THEN
  450.                 DO
  451.                     Obj(X).XDir = RANDOM.INT(7) - 3
  452.                     Obj(X).YDir = RANDOM.INT(7) - 3
  453.                 LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0)
  454.                 GOTO REDOX
  455.             END IF
  456.         END IF
  457.         Obj(X).Xpos = Obj(X).Xpos + Obj(X).XDir
  458.  
  459. REDOY:
  460.         NewY = Obj(X).Ypos + Obj(X).YDir
  461.         IF NewY < 0 OR NewY + SpriteY > ScreenY THEN
  462.             Obj(X).YDir = -Obj(X).YDir
  463.             IF RANDOM.INT(20) = 1 THEN
  464.                 DO
  465.                     Obj(X).XDir = RANDOM.INT(7) - 3
  466.                     Obj(X).YDir = RANDOM.INT(7) - 3
  467.                 LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0)
  468.                 GOTO REDOY
  469.             END IF
  470.         END IF
  471.         Obj(X).Ypos = Obj(X).Ypos + Obj(X).YDir
  472.  
  473.         'Draw Sprite
  474.  
  475.         TDRAW.BITMAP Img(Obj(X).Shape), Obj(X).Xpos, Obj(X).Ypos, SpriteX, SpriteY
  476.  
  477.         LastX(X, CurrentPage) = Obj(X).Xpos
  478.         LastY(X, CurrentPage) = Obj(X).Ypos
  479.  
  480.     NEXT X
  481.  
  482.     LastObjects(CurrentPage) = VisObjects
  483.  
  484.     ' Pan Screen Back & Forth
  485.  
  486.     ViewCnt = ViewCnt + 1
  487.     IF ViewCnt >= ViewMax THEN
  488.         ViewX = ViewX + ViewXD
  489.         IF ViewX = 0 OR ViewX = 39 THEN ViewXD = -ViewXD
  490.         IF ViewXD < 0 THEN
  491.             ViewY = ViewY + ViewYD
  492.             IF ViewY = 0 OR ViewY = 39 THEN ViewYD = -ViewYD
  493.         END IF
  494.     
  495.         SET.WINDOW CurrentPage, ViewX, ViewY
  496.  
  497.         ViewCnt = 0
  498.     ELSE
  499.         SET.DISPLAY.PAGE CurrentPage
  500.     END IF
  501.  
  502.     ' Cycle Colors
  503.  
  504.     SET.DAC.REGISTER 50 + PrevColor, 3 + PrevColor, 0, 60 - PrevColor
  505.     SET.DAC.REGISTER 50 + SetColor, SetColor, 10, 63 - SetColor
  506.  
  507.     SET.DAC.REGISTER 150 + PrevColor, 3 + PrevColor, 0, 60 - PrevColor
  508.     SET.DAC.REGISTER 150 + SetColor, 63, 63, SetColor
  509.  
  510.     SetColor = SetColor + SDir
  511.     IF SetColor = 60 OR SetColor = 0 THEN SDir = -SDir
  512.  
  513.     PrevColor = PrevColor + PDir
  514.     IF PrevColor = 60 OR PrevColor = 0 THEN PDir = -PDir
  515.  
  516.     CurrentPage = 1 - CurrentPage
  517.  
  518.     Code = SCAN.KEYBOARD
  519.  
  520.     IF Code = False THEN GOTO DRAW.LOOP
  521.  
  522.     IF Code = KyPlus THEN
  523.         IF ViewMax < 12 THEN ViewMax = ViewMax + 1
  524.         GOTO DRAW.LOOP
  525.     END IF
  526.  
  527.     IF Code = KyMinus THEN
  528.         IF ViewMax > 1 THEN ViewMax = ViewMax - 1
  529.         IF ViewCnt >= ViewMax THEN ViewCnt = 0
  530.         GOTO DRAW.LOOP
  531.     END IF
  532.  
  533.     IF Code = KyUp THEN
  534.         IF VisObjects < MaxSprites THEN VisObjects = VisObjects + 1
  535.         GOTO DRAW.LOOP
  536.     END IF
  537.         
  538.     IF Code = KyDown THEN
  539.         IF VisObjects > 1 THEN VisObjects = VisObjects - 1
  540.         GOTO DRAW.LOOP
  541.     END IF
  542.  
  543.  
  544. END SUB
  545.  
  546. SUB PRINT.TEXT (Text$, Xpos, Ypos, ColorF, ColorB)
  547.  
  548.     IF LEN(Text$) = 0 THEN EXIT SUB
  549.     PRINT.STR VARSEG(Text$), SADD(Text$), LEN(Text$), Xpos, Ypos, ColorF, ColorB
  550.  
  551.  
  552. END SUB
  553.  
  554. SUB TPRINT.TEXT (Text$, Xpos, Ypos, ColorF)
  555.  
  556.     IF LEN(Text$) = 0 THEN EXIT SUB
  557.  
  558.     TPRINT.STR VARSEG(Text$), SADD(Text$), LEN(Text$), Xpos, Ypos, ColorF
  559.  
  560. END SUB
  561.  
  562.